/**
 * 学习泛形
 * 泛型就是不确定类型
 */
function fn<T>(a: T) {
  return a;
}
/**
 * 可以直接调用具有泛型的函数
 */
let result = fn(12);//不知道泛型
// 推断不出
let result2 = fn<String>('hello world');//指定泛型

function fn2<T, K>(a: T, b: K) {
  console.log(a, b);
}
fn2<number, String>(12, '12');

// 限制泛型类型
interface Inter {
  length: number,
} 
/**
 * 泛型T必须实现T实现类(子类) 
 */
function fn3<T extends Inter>(a: T):number {
  return a.length;
}
// fn3({length:10})
fn3('as')

// 在类中使用泛型
class MyClass <T>{
  name:T;
  constructor(name:T){
    this.name=name
  }
}
const mc = new MyClass<string>("Rosingsun")
console.log(mc)